package com.urbane.search;

import com.urbane.search.entity.ProductDocument;
import com.urbane.search.mapper.ProductMapper;
import jakarta.annotation.Resource;
import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
import org.dromara.easyes.core.conditions.update.LambdaEsUpdateWrapper;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class DataCrudTest {

    @Resource
    private ProductMapper productMapper;

    // 插入一条记录,默认插入至当前 mapper 对应的索引
    @Test
    public void testDataInsert() {
        ProductDocument productDocument = new ProductDocument();
        productMapper.insert(productDocument);
    }

    // 批量插入多条记录,默认插入至当前 mapper 对应的索引
    @Test
    public void testDataInsertBatch() {
        ProductDocument productDocument = new ProductDocument();
        List<ProductDocument> productDocuments = new ArrayList<>();
        productDocuments.add(productDocument);
        productMapper.insertBatch(productDocuments);
    }

    // 根据 ID 删除
    @Test
    public void testDataDeleteById() {
        Long id = 1L;
        productMapper.deleteById(id);
    }

    // 根据 entity 条件，删除记录
    @Test
    public void testDataDeleteByEntity() {
        LambdaEsQueryWrapper<ProductDocument> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.eq(ProductDocument::getId, 1L).eq(ProductDocument::getTitle, "老汉");
        productMapper.delete(wrapper);
    }

    // 删除（根据ID 批量删除）
    @Test
    public void testDataDeleteBatchIds() {
        List<Long> ids = new ArrayList<>();
        ids.add(1L);
        ids.add(2L);
        productMapper.deleteBatchIds(ids);
    }


    // 根据 ID 更新
    @Test
    public void testDataUpdateByEntity() {
        ProductDocument productDocument = new ProductDocument();
        productDocument.setId("123456");
        productDocument.setTitle("老汉");
        productMapper.updateById(productDocument);
    }

    // 根据 ID 批量更新
    @Test
    public void testDataUpdateBatchByIds() {
        ProductDocument productDocument = new ProductDocument();
        productDocument.setId("123456");
        productDocument.setTitle("老汉");
        List<ProductDocument> productDocuments = new ArrayList<>();
        productDocuments.add(productDocument);
        productMapper.updateBatchByIds(productDocuments);
    }

    // 根据动态条件 更新记录
    @Test
    public void testDataUpdateByEntityWrapper() {
        ProductDocument productDocument = new ProductDocument();
        productDocument.setId("123456");
        productDocument.setTitle("老汉");
        LambdaEsUpdateWrapper<ProductDocument> wrapper = new LambdaEsUpdateWrapper<>();
        wrapper.eq(ProductDocument::getId, 1L).eq(ProductDocument::getTitle, "老汉");
        productMapper.update(productDocument, wrapper);
    }

    // 获取总数
    @Test
    public void testDataCount() {
        LambdaEsQueryWrapper<ProductDocument> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.eq(ProductDocument::getId, 1L).eq(ProductDocument::getTitle, "老汉");
        productMapper.selectCount(wrapper);

        wrapper.distinct(ProductDocument::getTitle);
        // 获取总数 distinct 为是否去重 若为 ture 则必须在 wrapper 中指定去重字段
        productMapper.selectCount(wrapper, true);


        // 根据 ID 查询
        productMapper.selectById(1L);
        // 查询（根据ID 批量查询）
        productMapper.selectBatchIds(Arrays.asList(1L, 2L));

        // 根据动态查询条件，查询一条记录 若存在多条记录 会报错
        productMapper.selectOne(wrapper);
        // 根据动态查询条件，查询全部记录
        productMapper.selectList(wrapper);
    }

}

// 以上内容参考 Easy-Es 数据 CRUD 示例 https://www.easy-es.cn/pages/f3ee10/#mapper-crud-%E6%8E%A5%E5%8F%A3